{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f23a152d",
   "metadata": {},
   "outputs": [],
   "source": [
    "import collections\n",
    "\n",
    "import datasets\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import torch.optim as optim\n",
    "import torchtext\n",
    "import tqdm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c661e3c4",
   "metadata": {},
   "outputs": [],
   "source": [
    "seed = 1234\n",
    "\n",
    "np.random.seed(seed)\n",
    "torch.manual_seed(seed)\n",
    "torch.cuda.manual_seed(seed)\n",
    "torch.backends.cudnn.deterministic = True"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "638a120e",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data, test_data = datasets.load_dataset(\"imdb\", split=[\"train\", \"test\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "7b34799a",
   "metadata": {},
   "outputs": [],
   "source": [
    "tokenizer = torchtext.data.utils.get_tokenizer(\"basic_english\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "6fa2f2e3",
   "metadata": {},
   "outputs": [],
   "source": [
    "def tokenize_example(example, tokenizer, max_length):\n",
    "    tokens = tokenizer(example[\"text\"])[:max_length]\n",
    "    length = len(tokens)\n",
    "    return {\"tokens\": tokens, \"length\": length}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "1f3a3894",
   "metadata": {},
   "outputs": [],
   "source": [
    "max_length = 256\n",
    "\n",
    "train_data = train_data.map(\n",
    "    tokenize_example, fn_kwargs={\"tokenizer\": tokenizer, \"max_length\": max_length}\n",
    ")\n",
    "test_data = test_data.map(\n",
    "    tokenize_example, fn_kwargs={\"tokenizer\": tokenizer, \"max_length\": max_length}\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7e5bd85d",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_size = 0.25\n",
    "\n",
    "train_valid_data = train_data.train_test_split(test_size=test_size)\n",
    "train_data = train_valid_data[\"train\"]\n",
    "valid_data = train_valid_data[\"test\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0bf984df",
   "metadata": {},
   "outputs": [],
   "source": [
    "min_freq = 5\n",
    "special_tokens = [\"<unk>\", \"<pad>\"]\n",
    "\n",
    "vocab = torchtext.vocab.build_vocab_from_iterator(\n",
    "    train_data[\"tokens\"],\n",
    "    min_freq=min_freq,\n",
    "    specials=special_tokens,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "5147a8fd",
   "metadata": {},
   "outputs": [],
   "source": [
    "unk_index = vocab[\"<unk>\"]\n",
    "pad_index = vocab[\"<pad>\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "8b97bda7",
   "metadata": {},
   "outputs": [],
   "source": [
    "vocab.set_default_index(unk_index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "843282aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "def numericalize_example(example, vocab):\n",
    "    ids = vocab.lookup_indices(example[\"tokens\"])\n",
    "    return {\"ids\": ids}"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "885b504a",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = train_data.map(numericalize_example, fn_kwargs={\"vocab\": vocab})\n",
    "valid_data = valid_data.map(numericalize_example, fn_kwargs={\"vocab\": vocab})\n",
    "test_data = test_data.map(numericalize_example, fn_kwargs={\"vocab\": vocab})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "2b956558",
   "metadata": {},
   "outputs": [],
   "source": [
    "train_data = train_data.with_format(type=\"torch\", columns=[\"ids\", \"label\", \"length\"])\n",
    "valid_data = valid_data.with_format(type=\"torch\", columns=[\"ids\", \"label\", \"length\"])\n",
    "test_data = test_data.with_format(type=\"torch\", columns=[\"ids\", \"label\", \"length\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "53575424",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'label': tensor(1),\n",
       " 'length': tensor(135),\n",
       " 'ids': tensor([  180,     4,    14,    10,   191,   841,    34,     7,     2,   121,\n",
       "            98,   816,    50,     8,  1516,     2,   380,     7,     2,   184,\n",
       "             3,     8,   805,    14,    18,    10,     8,   805,  2246,   429,\n",
       "             3,    12,   347,    15,     2,   388,  1025,     9,    16,    76,\n",
       "             5,    64,     7, 11198,     3,     2,  9212,    17,   761,     4,\n",
       "          7812,  5460,   198,    37,     4,     6,  3653,  3683,    17,   226,\n",
       "             5, 11893,     3,    53,     7,    15,  3310,   354,     5,   689,\n",
       "             4,     0,  5471,     3,  2706,  3826,     9,    16,   246,    13,\n",
       "            14,    18,  1111,    33,    17,   126,   188,     8,    35,   597,\n",
       "           181,    19,     5,    34,  3942,  1381,    13,     2,  5370,     3,\n",
       "            32,  4228,    10,    41,  2825,     8,    37,     3,     2,  4411,\n",
       "          1141,   213,  2655,     6, 16946,  3729,   590,  4845,     8,  2416,\n",
       "             6,  1953,     3,  1159, 20751,    10,     5,  8718,     3,   149,\n",
       "            74,    14,    18,  4292,    36])}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train_data[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "3a5e5883",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_collate_fn(pad_index):\n",
    "    def collate_fn(batch):\n",
    "        batch_ids = [i[\"ids\"] for i in batch]\n",
    "        batch_ids = nn.utils.rnn.pad_sequence(\n",
    "            batch_ids, padding_value=pad_index, batch_first=True\n",
    "        )\n",
    "        batch_length = [i[\"length\"] for i in batch]\n",
    "        batch_length = torch.stack(batch_length)\n",
    "        batch_label = [i[\"label\"] for i in batch]\n",
    "        batch_label = torch.stack(batch_label)\n",
    "        batch = {\"ids\": batch_ids, \"length\": batch_length, \"label\": batch_label}\n",
    "        return batch\n",
    "\n",
    "    return collate_fn"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "6a2bb50a",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_data_loader(dataset, batch_size, pad_index, shuffle=False):\n",
    "    collate_fn = get_collate_fn(pad_index)\n",
    "    data_loader = torch.utils.data.DataLoader(\n",
    "        dataset=dataset,\n",
    "        batch_size=batch_size,\n",
    "        collate_fn=collate_fn,\n",
    "        shuffle=shuffle,\n",
    "    )\n",
    "    return data_loader"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "2d8f0a73",
   "metadata": {},
   "outputs": [],
   "source": [
    "batch_size = 512\n",
    "\n",
    "train_data_loader = get_data_loader(train_data, batch_size, pad_index, shuffle=True)\n",
    "valid_data_loader = get_data_loader(valid_data, batch_size, pad_index)\n",
    "test_data_loader = get_data_loader(test_data, batch_size, pad_index)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "53427b55",
   "metadata": {},
   "outputs": [],
   "source": [
    "class LSTM(nn.Module):\n",
    "    def __init__(\n",
    "        self,\n",
    "        vocab_size,\n",
    "        embedding_dim,\n",
    "        hidden_dim,\n",
    "        output_dim,\n",
    "        n_layers,\n",
    "        bidirectional,\n",
    "        dropout_rate,\n",
    "        pad_index,\n",
    "    ):\n",
    "        super().__init__()\n",
    "        self.embedding = nn.Embedding(vocab_size, embedding_dim, padding_idx=pad_index)\n",
    "        self.lstm = nn.LSTM(\n",
    "            embedding_dim,\n",
    "            hidden_dim,\n",
    "            n_layers,\n",
    "            bidirectional=bidirectional,\n",
    "            dropout=dropout_rate,\n",
    "            batch_first=True,\n",
    "        )\n",
    "        self.fc = nn.Linear(hidden_dim * 2 if bidirectional else hidden_dim, output_dim)\n",
    "        self.dropout = nn.Dropout(dropout_rate)\n",
    "\n",
    "    def forward(self, ids, length):\n",
    "        # ids = [batch size, seq len]\n",
    "        # length = [batch size]\n",
    "        embedded = self.dropout(self.embedding(ids))\n",
    "        # embedded = [batch size, seq len, embedding dim]\n",
    "        packed_embedded = nn.utils.rnn.pack_padded_sequence(\n",
    "            embedded, length, batch_first=True, enforce_sorted=False\n",
    "        )\n",
    "        packed_output, (hidden, cell) = self.lstm(packed_embedded)\n",
    "        # hidden = [n layers * n directions, batch size, hidden dim]\n",
    "        # cell = [n layers * n directions, batch size, hidden dim]\n",
    "        output, output_length = nn.utils.rnn.pad_packed_sequence(packed_output)\n",
    "        # output = [batch size, seq len, hidden dim * n directions]\n",
    "        if self.lstm.bidirectional:\n",
    "            hidden = self.dropout(torch.cat([hidden[-1], hidden[-2]], dim=-1))\n",
    "            # hidden = [batch size, hidden dim * 2]\n",
    "        else:\n",
    "            hidden = self.dropout(hidden[-1])\n",
    "            # hidden = [batch size, hidden dim]\n",
    "        prediction = self.fc(hidden)\n",
    "        # prediction = [batch size, output dim]\n",
    "        return prediction"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "11206188",
   "metadata": {},
   "outputs": [],
   "source": [
    "vocab_size = len(vocab)\n",
    "embedding_dim = 300\n",
    "hidden_dim = 300\n",
    "output_dim = len(train_data.unique(\"label\"))\n",
    "n_layers = 2\n",
    "bidirectional = True\n",
    "dropout_rate = 0.5\n",
    "\n",
    "model = LSTM(\n",
    "    vocab_size,\n",
    "    embedding_dim,\n",
    "    hidden_dim,\n",
    "    output_dim,\n",
    "    n_layers,\n",
    "    bidirectional,\n",
    "    dropout_rate,\n",
    "    pad_index,\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "5feb9512",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "The model has 10,101,302 trainable parameters\n"
     ]
    }
   ],
   "source": [
    "def count_parameters(model):\n",
    "    return sum(p.numel() for p in model.parameters() if p.requires_grad)\n",
    "\n",
    "\n",
    "print(f\"The model has {count_parameters(model):,} trainable parameters\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "3edc8e02",
   "metadata": {},
   "outputs": [],
   "source": [
    "def initialize_weights(m):\n",
    "    if isinstance(m, nn.Linear):\n",
    "        nn.init.xavier_normal_(m.weight)\n",
    "        nn.init.zeros_(m.bias)\n",
    "    elif isinstance(m, nn.LSTM):\n",
    "        for name, param in m.named_parameters():\n",
    "            if \"bias\" in name:\n",
    "                nn.init.zeros_(param)\n",
    "            elif \"weight\" in name:\n",
    "                nn.init.orthogonal_(param)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "98490c40",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LSTM(\n",
       "  (embedding): Embedding(21635, 300, padding_idx=1)\n",
       "  (lstm): LSTM(300, 300, num_layers=2, batch_first=True, dropout=0.5, bidirectional=True)\n",
       "  (fc): Linear(in_features=600, out_features=2, bias=True)\n",
       "  (dropout): Dropout(p=0.5, inplace=False)\n",
       ")"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.apply(initialize_weights)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "72bfd654",
   "metadata": {},
   "outputs": [],
   "source": [
    "vectors = torchtext.vocab.GloVe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "6ec1ed34",
   "metadata": {},
   "outputs": [],
   "source": [
    "pretrained_embedding = vectors.get_vecs_by_tokens(vocab.get_itos())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "7489711f",
   "metadata": {},
   "outputs": [],
   "source": [
    "model.embedding.weight.data = pretrained_embedding"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "e2d0b14e",
   "metadata": {},
   "outputs": [],
   "source": [
    "lr = 5e-4\n",
    "\n",
    "optimizer = optim.Adam(model.parameters(), lr=lr)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "id": "d798a6bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "criterion = nn.CrossEntropyLoss()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "4a780705",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "device(type='cuda')"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "\n",
    "device"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "5c8302f0",
   "metadata": {},
   "outputs": [],
   "source": [
    "model = model.to(device)\n",
    "criterion = criterion.to(device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "8a1e9b07",
   "metadata": {},
   "outputs": [],
   "source": [
    "def train(dataloader, model, criterion, optimizer, device):\n",
    "    model.train()\n",
    "    epoch_losses = []\n",
    "    epoch_accs = []\n",
    "    for batch in tqdm.tqdm(dataloader, desc=\"training...\"):\n",
    "        ids = batch[\"ids\"].to(device)\n",
    "        length = batch[\"length\"]\n",
    "        label = batch[\"label\"].to(device)\n",
    "        prediction = model(ids, length)\n",
    "        loss = criterion(prediction, label)\n",
    "        accuracy = get_accuracy(prediction, label)\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "        epoch_losses.append(loss.item())\n",
    "        epoch_accs.append(accuracy.item())\n",
    "    return np.mean(epoch_losses), np.mean(epoch_accs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "c7988786",
   "metadata": {},
   "outputs": [],
   "source": [
    "def evaluate(dataloader, model, criterion, device):\n",
    "    model.eval()\n",
    "    epoch_losses = []\n",
    "    epoch_accs = []\n",
    "    with torch.no_grad():\n",
    "        for batch in tqdm.tqdm(dataloader, desc=\"evaluating...\"):\n",
    "            ids = batch[\"ids\"].to(device)\n",
    "            length = batch[\"length\"]\n",
    "            label = batch[\"label\"].to(device)\n",
    "            prediction = model(ids, length)\n",
    "            loss = criterion(prediction, label)\n",
    "            accuracy = get_accuracy(prediction, label)\n",
    "            epoch_losses.append(loss.item())\n",
    "            epoch_accs.append(accuracy.item())\n",
    "    return np.mean(epoch_losses), np.mean(epoch_accs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "d66535bd",
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_accuracy(prediction, label):\n",
    "    batch_size, _ = prediction.shape\n",
    "    predicted_classes = prediction.argmax(dim=-1)\n",
    "    correct_predictions = predicted_classes.eq(label).sum()\n",
    "    accuracy = correct_predictions / batch_size\n",
    "    return accuracy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "id": "24c05b57",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.46it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.59it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 0\n",
      "train_loss: 0.619, train_acc: 0.645\n",
      "valid_loss: 0.525, valid_acc: 0.738\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.96it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.56it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 1\n",
      "train_loss: 0.524, train_acc: 0.751\n",
      "valid_loss: 0.735, valid_acc: 0.743\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.95it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.49it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 2\n",
      "train_loss: 0.501, train_acc: 0.760\n",
      "valid_loss: 0.507, valid_acc: 0.783\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.87it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.03it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 3\n",
      "train_loss: 0.415, train_acc: 0.809\n",
      "valid_loss: 0.465, valid_acc: 0.778\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.70it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 15.62it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 4\n",
      "train_loss: 0.380, train_acc: 0.832\n",
      "valid_loss: 0.378, valid_acc: 0.850\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.62it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 15.55it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 5\n",
      "train_loss: 0.342, train_acc: 0.852\n",
      "valid_loss: 0.430, valid_acc: 0.848\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.52it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.01it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 6\n",
      "train_loss: 0.299, train_acc: 0.875\n",
      "valid_loss: 0.315, valid_acc: 0.862\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.71it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 15.55it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 7\n",
      "train_loss: 0.268, train_acc: 0.891\n",
      "valid_loss: 0.306, valid_acc: 0.872\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.81it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.39it/s]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 8\n",
      "train_loss: 0.249, train_acc: 0.899\n",
      "valid_loss: 0.308, valid_acc: 0.879\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "training...: 100%|██████████████████████████████| 37/37 [00:06<00:00,  5.73it/s]\n",
      "evaluating...: 100%|████████████████████████████| 13/13 [00:00<00:00, 16.18it/s]"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 9\n",
      "train_loss: 0.224, train_acc: 0.911\n",
      "valid_loss: 0.336, valid_acc: 0.884\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "\n"
     ]
    }
   ],
   "source": [
    "n_epochs = 10\n",
    "best_valid_loss = float(\"inf\")\n",
    "\n",
    "metrics = collections.defaultdict(list)\n",
    "\n",
    "for epoch in range(n_epochs):\n",
    "    train_loss, train_acc = train(\n",
    "        train_data_loader, model, criterion, optimizer, device\n",
    "    )\n",
    "    valid_loss, valid_acc = evaluate(valid_data_loader, model, criterion, device)\n",
    "    metrics[\"train_losses\"].append(train_loss)\n",
    "    metrics[\"train_accs\"].append(train_acc)\n",
    "    metrics[\"valid_losses\"].append(valid_loss)\n",
    "    metrics[\"valid_accs\"].append(valid_acc)\n",
    "    if valid_loss < best_valid_loss:\n",
    "        best_valid_loss = valid_loss\n",
    "        torch.save(model.state_dict(), \"lstm.pt\")\n",
    "    print(f\"epoch: {epoch}\")\n",
    "    print(f\"train_loss: {train_loss:.3f}, train_acc: {train_acc:.3f}\")\n",
    "    print(f\"valid_loss: {valid_loss:.3f}, valid_acc: {valid_acc:.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "id": "b360d0cd",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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IiIiruizzz6jevXqOByOc+6/6aabuP/++wHYs2cPN910E6Ghofj5+dGuXTvmzp1b6Pv+9VS9mJgYWrVqhZeXF23btmXdunVXnHX//v3cdNNN+Pn5ERAQwB133EFycnLB4xs2bKB79+74+/sTEBBAmzZtWL16NQDx8fEMGDCAoKAgfH19adKkCTNmzLjiDFdCxUlcT1YGrJ5obnd67Mpee2aSiDVfQG52scYSERGRCs7phOwT537lnDz/vpL4uszJr26//XaOHj3KggULCu47duwYM2fOZMiQIQBkZmbSv39/5s2bx7p16+jbty8DBgxg//79l7WPzMxMbrjhBho3bsyaNWt48cUXefrpp69oKB0OBwMHDuTYsWMsWrSIOXPmsHfvXgYNGlTwnCFDhlCjRg1iY2NZs2YNzz77LO7u7gCMHDmSrKwsFi9ezKZNm3jzzTfx8/O7ogxXyq1E312kKNZ+DafToHI9qN/3yl7baAD4hUFmEmz7FZrdVjIZRUREpOLJOQmvVy+4aQMCS2vf/zwEHr6XfFpQUBD9+vVj0qRJ9OjRA4Aff/yRkJAQunfvDkCLFi1o0aJFwWteeeUVpk2bxq+//sqoUaMuuY9JkybhcDiYMGECXl5eNGnShAMHDvDII49c9sdZtGgRmzZtIi4ujoiICAC++uormjRpQmxsLO3atWP//v38/e9/p2HDhgDUq1ev4PX79+/n1ltvpVmzZgBERV3ievhioCNO4lrycmHlx+Z2p1Fgu8IfUbs7tLnP3I4dX6zRRERERMqCIUOG8NNPP5GVlQXAt99+y5133okt//eqzMxMnn76aRo1akRgYCB+fn5s27btso84bdu2jebNm+Pl5VVwX8eOHa8o486dO4mIiCgoTQCNGzcmMDCQbdu2ATB69GiGDx9Oz549+c9//sOePXsKnvv444/z6quv0rlzZ1544QU2btx4RfsvCh1xEtey9WdISwDfKtD8zqK9R5v7YMk7sH8FJG2GsKbFmVBEREQqKncf88hPPofDQXpGBgH+/gWlpET3fZkGDBiA0+lk+vTptGvXjiVLlvDee+8VPP70008zZ84c3nnnHerWrYu3tze33XYb2dmudZnDiy++yODBg5k+fTp//PEHL7zwApMnT2bgwIEMHz6cPn36MH36dGbPns0bb7zBf//7Xx577Aov87gCOuIkrsPp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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(10, 6))\n",
    "ax = fig.add_subplot(1, 1, 1)\n",
    "ax.plot(metrics[\"train_losses\"], label=\"train loss\")\n",
    "ax.plot(metrics[\"valid_losses\"], label=\"valid loss\")\n",
    "ax.set_xlabel(\"epoch\")\n",
    "ax.set_ylabel(\"loss\")\n",
    "ax.set_xticks(range(n_epochs))\n",
    "ax.legend()\n",
    "ax.grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "id": "742a6855",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA1cAAAINCAYAAADSoIXVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAACC10lEQVR4nOzdd3wUdf7H8dfuplcIkAaBEKp0pAmIeIogKJY7FbDQBMuJp8fPU/GspyeWO45TOVEECzY8uydVlF4FUYJICyS0JCRAKkk2u/P7Y8lCSAJhSTKb5P18PPLI7uzszGc/rDhvvjPfsRiGYSAiIiIiIiIXxGp2ASIiIiIiInWBwpWIiIiIiEgVULgSERERERGpAgpXIiIiIiIiVUDhSkREREREpAooXImIiIiIiFQBhSsREREREZEqoHAlIiIiIiJSBXzMLsAbOZ1ODh06RGhoKBaLxexyRERERETEJIZhkJOTQ2xsLFbr2cemFK7KcejQIeLi4swuQ0REREREvMT+/ftp1qzZWddRuCpHaGgo4GpgWFiYqbXY7XYWL17M4MGD8fX1NbWW2ka984z65hn1zTPqm+fUO8+ob55R3zyn3nnGm/qWnZ1NXFycOyOcjcJVOUpOBQwLC/OKcBUUFERYWJjpX6zaRr3zjPrmGfXNM+qb59Q7z6hvnlHfPKfeecYb+1aZy4U0oYWIiIiIiEgVULgSERERERGpAgpXIiIiIiIiVUDXXHnIMAyKi4txOBzVuh+73Y6Pjw8FBQXVvq+6pjb1zmaz4ePjo6n/RURERGoxhSsPFBUVcfjwYfLz86t9X4ZhEB0dzf79+3XgfZ5qW++CgoKIiYnBz8/P7FJERERExAMKV+fJ6XSyd+9ebDYbsbGx+Pn5VeuBu9PpJDc3l5CQkHPetExKqy29MwyDoqIijhw5wt69e2nTpo1X1ysiIiIi5VO4Ok9FRUU4nU7i4uIICgqq9v05nU6KiooICAjQAfd5qk29CwwMxNfXl+TkZHfNIiIiIlK7ePcRpxfz9oN1qX30nRIRERGp3XQ0JyIiIiIiUgUUrsQj8fHxTJ8+3ewyRERERES8hq65qicuv/xyunXrVmWBaOPGjQQHB1fJtkRERERE6gKFK3EzDAOHw4GPz7m/Fk2aNKmBimrW+Xx+EREREZEz6bTAemDs2LEsX76cf//731gsFiwWC/v27WPZsmVYLBYWLFhAjx498Pf3Z9WqVezZs4frr7+eqKgoQkJC6NWrF999912pbZ55WqDFYuGtt97ixhtvJCgoiDZt2vD111+fta65c+fSs2dPQkNDiY6O5tZbbyU9Pb3UOtu2bePaa68lLCyM0NBQBgwYwJ49e9yvz5kzh44dO+Lv709MTAyTJk0CYN++fdhsNrZu3epe9/jx41gsFpYtWwZwQZ+/sLCQRx55hLi4OPz9/WndujWzZ8/GMAxat27NP/7xj1Lrb9myBYvFwu7du8/+hyUiIiIitZbCVRUwDIP8ouJq+zlR5Ch3uWEYlarv3//+N3379mXixIkcPnyYw4cPExcX53790Ucf5YUXXmD79u106dKF3Nxchg0bxtKlS/npp5+4+uqrGT58OCkpKWfdzzPPPMMtt9zCL7/8wrBhw7jttts4evRohevb7XaeffZZfv75Z7788kv27dvH2LFj3a8fPHiQyy67DH9/f77//ns2bdrE+PHjKS4uBuD111/nvvvu46677mLr1q18/fXXtG7dulI9OZ0nn3/06NF89NFHvPLKK2zfvp033niDkJAQLBYL48eP5+233y61j7fffpvLLrvMo/pEREREpHbQ+U9V4ITdQYcnF9X4fn/92xCC/M79RxgeHo6fnx9BQUFER0eXef1vf/sbV111lft5REQEXbt2dT9/9tln+eKLL/j666/dI0PlGTt2LKNGjQLg+eef55VXXmHDhg1cffXV5a4/fvx49+OEhAReeeUVevXq5b7x74wZMwgPD+fjjz/G19cXgLZt27rf89xzz/F///d/PPDAA+5lvXr1Olc7yjjfz79z504++eQTlixZwqBBg9z1n96HJ598kg0bNtC7d2/sdjsffvhhmdEsEREREalbNHIl9OzZs9Tz3NxcHnroIS666CIaNGhASEgI27dvP+fIVZcuXdyPg4ODCQsLK3Oa3+k2bdrE8OHDad68OaGhoQwcOBDAvZ8tW7YwYMAAd7A6XXp6OocOHeLKK6+s9OesyPl+/i1btmCz2dz1nik2NpZrrrmGOXPmAPDNN99QWFjIzTfffMG1ioiIiIj30shVFQj0tfHr34ZUy7adTic52TmEhoWWuclsoK+tSvZx5qx/Dz30EEuWLOEf//gHrVu3JjAwkJtuuomioqKzbufMEGSxWHA6neWum5eXx5AhQxgy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MHbsWP7whz8ArpGbffv2cfnll5fab8lnL1HShw4dOvD+++9TVFTkDgYbNmwotc6Zdu7cSWZmJi+++CJxcXEAbN68udR7unbtyrvvvovD4SjzZxEeHk58fHypa8lOVzI7ZGpqqnv/v/zyS6ntlyw/s8Zz9aNr1644nU5WrlzpPi3wTNdeey3BwcG88cYbLFq0iBUrVpz1z9BqtWKxWMr93pnBW+qobdQ3z6hvnlPvPKO+eaa+9C0jt5AdqTnsSM1hZ1oOO9Jy2JWWS25h+WeWBPraaBsVQtuoUNpFh7p/R4b6U1xczPz58xnUIbpe9K6qecN37nz2b+ppgZMnT2bMmDH07NmT3r17M336dPLy8hg3bhzgmjCgadOmTJ06FYD169dz8OBBunXrxsGDB3n66adxOp08/PDDld5mfXbbbbdx7bXXsm3bNm6//fZSr7Vp04bPP/+c4cOHY7FYeOKJJyq8Nqg8t956K3/961+ZOHEiU6ZMYd++fWVmyztT8+bN8fPz49VXX+Wee+4hMTGRZ599ttQ6kyZN4tVXX2XkyJFMmTKF8PBw93VM7dq14+mnn+aee+4hMjKSoUOHkpOTw+rVq7n//vsJDAykV69evPTSS7Rq1Yr09HQef/zxSn2ec/UjPj6eMWPGMH78ePeEFsnJyaSnp7vDvs1mY+zYsUyZMoU2bdrQt2/fSvdTREREql92gZ1daTnsSM11haiTYSozr6jc9X2sFlo1CaFtdCjtS0JUVCjNGgZitWrSCTE5XI0YMYIjR47w5JNPkpqaSrdu3Vi4cKF7QoqUlJRS/9JfUFDA448/TlJSEiEhIQwbNoy5c+fSoEGDSm+zPrviiiuIiIhgx44d3HrrraVemzZtGuPHj6dfv340btyYRx555LyGQENCQvjmm2+455576N69Ox06dODFF190j/yUp0mTJrzzzjs89thjvPLKK1x88cX84x//4LrrrnOv06hRI77//nv+8pe/MHDgQGw2G926daN///4AjBkzhoKCAv71r3/x0EMP0bhxY2666Sb3+1999VX+/Oc/06NHD9q1a8dLL73E4MGDz/l5KtOP119/nccee4w//vGPZGZm0rx5cx577LFS69x55508//zzCvciIiImKrA72J2eW2okamdqDoeyCspd32KBFhFBZUai4hsF4+ejqc+lYhajZEo1ccvOziY8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Z9VeihxOesU3pEeLCLPLEREREREpQ+FKvF7WCTsfrE8BNGolIiIiIt5L4Uq83vvrksktLKZdVCi/axdpdjkiIiIiIuVSuBKvVmB38PbqvQDcPTABSz2cJVFEREREageFK/Fqn246QEZuEU0bBDK8a6zZ5YiIiIiIVEjhSrxWscPJmyuSAJgwoCW+Nn1dRURERMR76WhVvNaCxFRSjubTMMiXEb3izC5HREREROSsFK7EKxmGwczlewAY0y+eID/d71pEREREvJvClXillbsy2HYom0BfG2P6xptdjoiIiIjIOSlciVcqGbUa2TuOhsF+JlcjIiIiInJuClfidX7ef5w1ezLxsVqYMCDB7HJERERERCpF4Uq8Tsmo1XXdYmnaINDkakREREREKkfhSrzKniO5LNyWCsA9A1uZXI2IiIiISOUpXIlXmbUiCcOAQRdF0jYq1OxyREREREQqTeFKvEZadgGfbz4IaNRKRERERGofhSvxGnNW7aXI4aRXfEN6xkeYXY6IiIiIyHlRuBKvkHXCzgfrUwCNWomIiIhI7aRwJV7h/XXJ5BYW0y4qlN+1izS7HBERERGR86ZwJaYrsDt4e/U+AO4emIDVajG3IBERERERDyhciek+3XSAjNxCmjYIZHjXWLPLERERERHxiMKVmKrY4eTNFUkATBjQEl+bvpIiIiIiUjvpSFZMtSAxlZSj+TQM8mVErzizyxERERER8ZjClZjGMAxmLt8DwJh+8QT5+ZhckYiIiIiI5xSuxDSrdmew7VA2gb42xvSNN7scEREREZELonAlpnl9mWvUamTvOBoG+5lcjYiIiIjIhVG4ElP8vP84a/Zk4mO1MGFAgtnliIiIiIhcMIUrMUXJtVbXdYulaYNAk6sREREREblwCldS45KO5LJwWyoA9wxsZXI1IiIiIiJVQ+FKatybK5IwDBh0USRto0LNLkdEREREpEooXEmNSssu4PPNBwGNWomIiIhI3aJwJTVqzqq9FDmc9GzRkJ7xEWaXIyIiIiJSZRSupMZknbDzwfoUAO69XKNWIiIiIlK3KFxJjflgfTK5hcW0jQrhd+0izS5HRERERKRKKVxJjSiwO5izah/gutbKarWYW5CIiIiISBVTuJIa8dnmA2TkFtK0QSDDu8aaXY6IiIiISJVTuJJq53AavLkiCYAJA1ria9PXTkRERETq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xpKQkMBtt91GSkpKtX6WmvTmyiScBvyuXRPaR4eZXY6IiIiIiJxk2shVRkYGDoeDqKioUsujoqL47bffyn1PUlIS33//Pbfddhvz589n9+7d/PGPf8Rut/PUU08B0KdPH9555x3atWvH4cOHeeaZZxgwYACJiYmEhoaWu93CwkIKCwvdz7OzswGw2+3Y7faq+LgeK9m/3W7nSE4hn246AMDES+NNr83bnd47qTz1zTPqm2fUN8+pd55R3zyjvnlOvfOMN/XtfGqwGIZhVGMtFTp06BBNmzZlzZo19O3b17384YcfZvny5axfv77Me9q2bUtBQQF79+7FZrMBrlMLX375ZQ4fPlzufo4fP06LFi2YNm0ad955Z7nrPP300zzzzDNlln/44YcEBXnPNU3fJFv57pCV+BCDBzs5sFjMrkhEREREpG7Lz8/n1ltvJSsri7Cws585ZtrIVePGjbHZbKSlpZVanpaWVuH1UjExMfj6+rqDFcBFF11EamoqRUVF+PmVnZK8QYMGtG3blt27d1dYy5QpU5g8ebL7eXZ2NnFxcQwePPicDaxudrudJUuWcMmA3/HXzWuBYh69rjtXXlR2wg8praR3V111lfsaPTk39c0z6ptn1DfPqXeeUd88o755Tr3zjDf1reSstsowLVz5+fnRo0cPli5dyg033ACA0+lk6dKlTJo0qdz39O/fnw8//BCn04nV6rpcbOfOncTExJQbrAByc3PZs2cPd9xxR4W1+Pv74+/vX2a5r6+v6X+YJT7dkkpuYTFtIkMY3CkWq1XDVpXlTX+OtYn65hn1zTPqm+fUO8+ob55R3zyn3nnGG/p2Pvs39T5XkydPZtasWbz77rts376de++9l7y8PPfsgaNHj2bKlCnu9e+9916OHj3KAw88wM6dO/n22295/vnnue+++9zrPPTQQyxfvpx9+/axZs0abrzxRmw2G6NGjarxz1dV7E54Z00yAHcPbKVgJSIiIiLihUydin3EiBEcOXKEJ598ktTUVLp168bChQvdk1ykpKS4R6gA4uLiWLRoEX/+85/p0qULTZs25YEHHuCRRx5xr3PgwAFGjRpFZmYmTZo04dJLL2XdunU0adKkxj9fVdl4xMKR3CJiwgO4rmus2eWIiIiIiEg5TL+77qRJkyo8DXDZsmVllvXt25d169ZVuL2PP/64qkrzCg6nwfeHXAFzwoAE/HxMHWwUEREREZEK6Ejdyy3+NY0jBRbCA30Y2SvO7HJERERERKQCCldezDAMZq3aB8DtfZoT7G/6QKOIiIiIiFRA4cqL2R0Gl7ZqRLivwR2XNDe7HBEREREROQsNhXgxPx8rk69qQ5uiXTQKLn+qeRERERER8Q4auaoFbJp5XURERETE6ylciYiIiIiIVAGFKxERERERkSqgcCUiIiIiIlIFFK5ERERERESqgMKViIiIiIhIFVC4EhERERERqQIKVyIiIiIiIlVA4UpERERERKQKKFyJiIiIiIhUAYUrERERERGRKqBwJSIiIiIiUgUUrkRERERERKqAwpWIiIiIiEgVULgSERERERGpAgpXIiIiIiIiVUDhSkREREREpAooXImIiIiIiFQBH7ML8EaGYQCQnZ1tciVgt9vJz88nOzsbX19fs8upVdQ7z6hvnlHfPKO+eU6984z65hn1zXPqnWe8qW8lmaAkI5yNwlU5cnJyAIiLizO5EhERERER8QY5OTmEh4efdR2LUZkIVs84nU4OHTpEaGgoFovF1Fqys7OJi4tj//79hIWFmVpLbaPeeUZ984z65hn1zXPqnWfUN8+ob55T7zzjTX0zDIOcnBxiY2OxWs9+VZVGrsphtVpp1qyZ2WWUEhYWZvoXq7ZS7zyjvnlGffOM+uY59c4z6ptn1DfPqXee8Za+nWvEqoQmtBAREREREakCClciIiIiIiJVQOHKy/n7+/PUU0/h7+9vdim1jnrnGfXNM+qbZ9Q3z6l3nlHfPKO+eU6980xt7ZsmtBAREREREakCGrkSERERERGpAgpXIiIiIiIiVUDhSkREREREpAooXImIiIiIiFQBhSsvN2PGDOLj4wkICKBPnz5s2LDB7JK83ooVKxg+fDixsbFYLBa+/PJLs0vyelOnTqVXr16EhoYSGRnJDTfcwI4dO8wuq1Z4/fXX6dKli/smh3379mXBggVml1XrvPDCC1gsFh588EGzS/FqTz/9NBaLpdRP+/btzS6r1jh48CC33347jRo1IjAwkM6dO/Pjjz+aXZZXi4+PL/Ods1gs3HfffWaX5tUcDgdPPPEELVu2JDAwkFatWvHss8+ieeTOLScnhwcffJAWLVoQGBhIv3792Lhxo9llVZrClRebN28ekydP5qmnnmLz5s107dqVIUOGkJ6ebnZpXi0vL4+uXbsyY8YMs0upNZYvX859993HunXrWLJkCXa7ncGDB5OXl2d2aV6vWbNmvPDCC2zatIkff/yRK664guuvv55t27aZXVqtsXHjRt544w26dOlidim1QseOHTl8+LD7Z9WqVWaXVCscO3aM/v374+vry4IFC/j111/55z//ScOGDc0uzatt3Lix1PdtyZIlANx8880mV+bdXnzxRV5//XVee+01tm/fzosvvshLL73Eq6++anZpXm/ChAksWbKEuXPnsnXrVgYPHsygQYM4ePCg2aVViqZi92J9+vShV69evPbaawA4nU7i4uK4//77efTRR02urnawWCx88cUX3HDDDWaXUqscOXKEyMhIli9fzmWXXWZ2ObVOREQEL7/8MnfeeafZpXi93NxcLr74Yv7zn//w3HPP0a1bN6ZPn252WV7r6aef5ssvv2TLli1ml1LrPProo6xevZqVK1eaXUqt9uCDD/K///2PXbt2YbFYzC7Ha1177bVERUUxe/Zs97I//OEPBAYG8v7775tYmXc7ceIEoaGhfPXVV1xzzTXu5T169GDo0KE899xzJlZXORq58lJFRUVs2rSJQYMGuZdZrVYGDRrE2rVrTaxM6oOsrCzAFRKk8hwOBx9//DF5eXn07dvX7HJqhfvuu49rrrmm1N91cna7du0iNjaWhIQEbrvtNlJSUswuqVb4+uuv6dmzJzfffDORkZF0796dWbNmmV1WrVJUVMT777/P+PHjFazOoV+/fixdupSdO3cC8PPPP7Nq1SqGDh1qcmXerbi4GIfDQUBAQKnlgYGBtWaU3sfsAqR8GRkZOBwOoqKiSi2Piorit99+M6kqqQ+cTicPPvgg/fv3p1OnTmaXUyts3bqVvn37UlBQQEhICF988QUdOnQwuyyv9/HHH7N58+ZadS692fr06cM777xDu3btOHz4MM888wwDBgwgMTGR0NBQs8vzaklJSbz++utMnjyZxx57jI0bN/KnP/0JPz8/xowZY3Z5tcKXX37J8ePHGTt2rNmleL1HH32U7Oxs2rdvj81mw+Fw8Pe//53bbrvN7NK8WmhoKH379uXZZ5/loosuIioqio8++oi1a9fSunVrs8urFIUrESnlvvvuIzExsdb8C5E3aNeuHVu2bCErK4tPP/2UMWPGsHz5cgWss9i/fz8PPPAAS5YsKfMvlFKx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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure(figsize=(10, 6))\n",
    "ax = fig.add_subplot(1, 1, 1)\n",
    "ax.plot(metrics[\"train_accs\"], label=\"train accuracy\")\n",
    "ax.plot(metrics[\"valid_accs\"], label=\"valid accuracy\")\n",
    "ax.set_xlabel(\"epoch\")\n",
    "ax.set_ylabel(\"loss\")\n",
    "ax.set_xticks(range(n_epochs))\n",
    "ax.legend()\n",
    "ax.grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "id": "8b89f53f",
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "evaluating...: 100%|████████████████████████████| 49/49 [00:03<00:00, 15.55it/s]\n"
     ]
    }
   ],
   "source": [
    "model.load_state_dict(torch.load(\"lstm.pt\"))\n",
    "\n",
    "test_loss, test_acc = evaluate(test_data_loader, model, criterion, device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "id": "10bc7bc3",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test_loss: 0.327, test_acc: 0.862\n"
     ]
    }
   ],
   "source": [
    "print(f\"test_loss: {test_loss:.3f}, test_acc: {test_acc:.3f}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "id": "c07df383",
   "metadata": {},
   "outputs": [],
   "source": [
    "def predict_sentiment(text, model, tokenizer, vocab, device):\n",
    "    tokens = tokenizer(text)\n",
    "    ids = vocab.lookup_indices(tokens)\n",
    "    length = torch.LongTensor([len(ids)])\n",
    "    tensor = torch.LongTensor(ids).unsqueeze(dim=0).to(device)\n",
    "    prediction = model(tensor, length).squeeze(dim=0)\n",
    "    probability = torch.softmax(prediction, dim=-1)\n",
    "    predicted_class = prediction.argmax(dim=-1).item()\n",
    "    predicted_probability = probability[predicted_class].item()\n",
    "    return predicted_class, predicted_probability"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "id": "8d9d591d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0.9134657382965088)"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text = \"This film is terrible!\"\n",
    "\n",
    "predict_sentiment(text, model, tokenizer, vocab, device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "id": "f392b05a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1, 0.9098743200302124)"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text = \"This film is great!\"\n",
    "\n",
    "predict_sentiment(text, model, tokenizer, vocab, device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "id": "3196951d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0.7186734676361084)"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text = \"This film is not terrible, it's great!\"\n",
    "\n",
    "predict_sentiment(text, model, tokenizer, vocab, device)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "c35aeb03",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(0, 0.6654170155525208)"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "text = \"This film is not great, it's terrible!\"\n",
    "\n",
    "predict_sentiment(text, model, tokenizer, vocab, device)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
